package Exams.MeituanPack.q031204_boom;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读入一共有多少个房间
        int n = sc.nextInt();
        // 游戏持续多少秒
        int m = sc.nextInt();
        int[] blocks = new int[m + 1];
        for (int i = 1; i <= m; i++) {
            // 读入每秒会爆炸的房间
            blocks[i] = sc.nextInt();
        }
        // 一个boom数组
        int[] boom = new int[n + 1];
        Arrays.fill(boom, -1);
        int prevMove = 0;
        // index就是当前秒数
        int index = 1, count = 0;
        // 由于一开始处于1号房间，所以直到爆炸房间到1号房间之前我们都不需要移动
        while (blocks[index] != 1) {
            index++;
        }
        // 结束循环之后，我们应该开始移动
        int result = 0;
        while (index <= m) {
            // boom一开始均设置为-1， blocks[index] 代表第index秒爆炸的房间
            // 所以将
            if (boom[blocks[index]] < prevMove) {
                boom[blocks[index]] = index;
                count++;
            }
            if (count == n) {
                prevMove = index;
                result++;
                count = 1;
            }
            // 进入下一秒
            index++;
        }
        if (count >= 1) {
            result += 1;
        }
        System.out.println(result);
    }

    public void solution2(){
        int[] booms = new int[]{2, 3, 1, 3, 2, 1, 1, 2, 3, 1};//测试案例
        int numb_room=0;
        for(int i:booms)
            numb_room=Math.max(numb_room,i);//确定有多少房间
        Set<Integer> noboom=new HashSet<>();
        int cur_room=1;
        int ans=0;
        for(int i=0;i<booms.length;){
            //如果爆炸，跳到未来最晚/根本不再爆炸的房间
            if(booms[i]==cur_room){
                //当前房间爆炸，必然跳一次
                ans++;
                //判断跳到哪——最晚爆炸/不爆炸的房间
                for(int j=1;j<=numb_room;j++)
                    noboom.add(j);
                for(;i<booms.length;i++){
                    //最晚爆炸/不爆炸的房间：为set.size=1时的房间 或 i=booms.length时，存在于set的所有房间，后者直接跳出两个循环
                    if(noboom.size()==1){
                        cur_room=noboom.iterator().next();
                        noboom.clear();
                        break;//break后不执行最近for循环的i++
                    }
                    noboom.remove(booms[i]);
                }
            }
            //不爆炸，在cur_room等待下一次爆炸
            else i++;
        }
        System.out.println(ans);

    }

}
